package com.continautos.common.web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.continautos.common.enums.EEstadoCola;
import com.continautos.common.enums.ETipoUsuario;
import com.continautos.common.persistence.DAOFactory;
import com.continautos.common.persistence.dto.CtaTbAtencion;
import com.continautos.common.persistence.dto.CtaTbColaCliente;
import com.continautos.common.persistence.dto.CtaTbColaClientePk;
import com.continautos.common.persistence.exceptions.CtaTbAtencionDaoException;
import com.continautos.common.persistence.exceptions.CtaTbColaClienteDaoException;

@ManagedBean(name = "solicitarClienteBean")
@SessionScoped
public class SolicitarClienteBean implements Serializable{

	private static final long serialVersionUID = 1L;
	
	
	@ManagedProperty(value = "#{userSessionBean}")
	private UserSessionBean userSessionBean;
	
	private int filaSelected;
	
	private List< Map<String, String> > listadoClientesCola = new ArrayList<Map<String,String>>();
	
	private int codigoClienteAnterior;

	
	public SolicitarClienteBean(){
		
		codigoClienteAnterior=0;
		
		listadoClientesCola = new ArrayList<Map<String, String>>();
		FacesContext facesContext = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
		userSessionBean = (UserSessionBean)session.getAttribute("userSessionBean");
		
		
		//DUMMY
		/*
		Map<String, String> columnas = new HashMap<String, String>();
		
		columnas.put("1", "columna 1");
		columnas.put("2", "columna 2");
		columnas.put("3", "columna 3");
		columnas.put("4", "columna 4");
		columnas.put("5", "columna 5");
		columnas.put("6", "columna 6");
		
		listaPedidos.add(columnas);
		listaPedidos.add(columnas);
		listaPedidos.add(columnas);
		listaPedidos.add(columnas);
		listaPedidos.add(columnas);
		listaPedidos.add(columnas);
		listaPedidos.add(columnas);
		listaPedidos.add(columnas);
		*/
	}	
	
	public void consultarProximoEnLista(){
		
		listadoClientesCola = DAOFactory.getConsultasDao().listadoProximoCliente();
		
		String codigoCola =  listadoClientesCola.get(0).get("ID");
		
		if(codigoCola != null){
			int cod = Integer.parseInt(codigoCola);
			CtaTbAtencion atencion = new CtaTbAtencion();
			CtaTbColaCliente cola;
			
			try {
				cola = DAOFactory.getCtaTbColaClienteDao().findByPrimaryKey(cod);
				cola.setEstado(EEstadoCola.ATENCION.getValue());
				cola.setFechaAtencion(new Date());
				
				DAOFactory.getCtaTbColaClienteDao().update(new CtaTbColaClientePk(cod), cola);
				
				codigoClienteAnterior = cod;
				
				// INsertar el asesor
				if(userSessionBean.getTipoUsuario().equals(ETipoUsuario.ASESOR)){
					
					atencion.setFecha(new Date());
					atencion.setIdAsesor(userSessionBean.getUsuario().getId());
					
					atencion.setIdCliente(cola.getIdCliente());
					atencion.setIdIngreso(cola.getIdIngreso());
					
					DAOFactory.getCtaTbAtencionDao().insert(atencion);
				}
				
			} catch (CtaTbColaClienteDaoException e) {
				e.printStackTrace();
			} catch (CtaTbAtencionDaoException e) {
				e.printStackTrace();
			}
			
			
			
		}
	}
	
	
	public void terminanAtencion(){
		
		if(codigoClienteAnterior!=0){
			
			try {
				CtaTbColaCliente cola = DAOFactory.getCtaTbColaClienteDao().findByPrimaryKey(codigoClienteAnterior);
				cola.setEstado(EEstadoCola.TERMINADO.getValue());
				cola.setFechaTerminado(new Date());
				
				DAOFactory.getCtaTbColaClienteDao().update(new CtaTbColaClientePk(codigoClienteAnterior), cola);
				
				codigoClienteAnterior=0;
				
				listadoClientesCola = new ArrayList<Map<String,String>>();
				
			} catch (CtaTbColaClienteDaoException e) {
				e.printStackTrace();
			}
			
		}
		
	}

	public UserSessionBean getUserSessionBean() {
		return userSessionBean;
	}

	public void setUserSessionBean(UserSessionBean userSessionBean) {
		this.userSessionBean = userSessionBean;
	}

	public int getFilaSelected() {
		return filaSelected;
	}

	public void setFilaSelected(int filaSelected) {
		this.filaSelected = filaSelected;
	}

	public List<Map<String, String>> getListadoClientesCola() {
		return listadoClientesCola;
	}

	public void setListadoClientesCola(List<Map<String, String>> listadoClientesCola) {
		this.listadoClientesCola = listadoClientesCola;
	}




}
